package modelo;

import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;

public class MinaPuntualConRetardoTest {

	private Municion minaPuntual;
	private Coordenada posicion;
	@Before
	
	public void setUp(){

		posicion = new Coordenada(2,1);
		minaPuntual = new MinaPuntualConRetardo(posicion);
	}
	
	@Test
	public void testElCostoDeUnaMinaPuntualEsDe50Puntos(){
		
		Assert.assertEquals(minaPuntual.getCosto(),50);
	
	}
	
	@Test
	
	public void testMinaPuntualNoUsadaDebeDarFalse(){
	
		Assert.assertFalse(minaPuntual.estaUsada());
	}
	
	
	@Test
	
	public void testMinaPuntualCon1TurnoUsadaDebeDarFalse(){
	
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaPuntual.vivir();
		minaPuntual.atacar(lancha);
		Assert.assertFalse(minaPuntual.estaUsada());
	
	}
	
	
	@Test
	
	public void testMinaPuntualCon2TurnosUsadaDebeDarFalse(){
		
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaPuntual = new MinaPuntualConRetardo(posicion);
		minaPuntual.vivir();
		minaPuntual.vivir();
		minaPuntual.atacar(lancha);
		Assert.assertFalse(minaPuntual.estaUsada());
	
	}
	

	@Test
	public void testMinaPuntualConTresTurnosUsadaEnPosicionVaciaDebeDarTrue(){
		
		minaPuntual = new MinaPuntualConRetardo(posicion);
		minaPuntual.vivir();
		minaPuntual.vivir();
		minaPuntual.vivir();
		minaPuntual.atacar(null);
		Assert.assertTrue(minaPuntual.estaUsada());
	
	}
	
	@Test
	
	public void testMinaPuntualCon3TurnosUsadaEnPosicionConNaveDebeDarTrue(){
		
	
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		minaPuntual = new MinaPuntualConRetardo(posicion);
		
		minaPuntual.vivir();
		minaPuntual.vivir();
		minaPuntual.vivir();
		minaPuntual.atacar(lancha);		
		Assert.assertTrue(minaPuntual.estaUsada());
	
	}

	@Test
	
	public void testMinaPuntualCon3TurnosUsadaEnPosicionConNaveDebeDestruir(){
			

		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		minaPuntual = new MinaPuntualConRetardo(posicion);
		
		minaPuntual = new MinaPuntualConRetardo(posicion);
		
		minaPuntual.vivir();
		minaPuntual.vivir();
		
		minaPuntual.atacar(lancha);
		
		posicion = new Coordenada(2,1);
		
		minaPuntual = new MinaTripleConRetardo(posicion);	
		minaPuntual.vivir();
		minaPuntual.vivir();
		
		minaPuntual.atacar(lancha);	
		
		Assert.assertTrue(lancha.estaDestruida());
	
	}

}
